我們的 EKS 架構中有使用 appmesh ,但其實在規模及架構的評估下,我們並不需要用到這麼複雜,這邊來做個整理
想像一下,我們寫了兩個服務, Generally 各別放在兩個 pod 中。他們之間的溝通很簡單,靠著各自的唯一的內部 IP 地址(Pod 在創建時都會分配一個)即可。但 pod 總是被開開關關,所以 Kubernetes 為一組具有相同功能的 Pod 提供一個穩定且可靠的接入點。服務會為其後端 Pod 提供一個固定的虛擬 IP 地址以及 DNS 名稱。這使其他 Pod 可以通過服務名稱進行發現和連接,而無需關心單個 Pod 的 IP 地址。
但在某些特定時候,僅僅只是讓流量可以進入到對應的 pod 並不能滿足我們的需求。像是金絲雀部署(Canary Deployment)、A/B 測試和故障注入等流量路由和管理。
想像今天我們在每個 pod 的流量進入前,新增一層 layer(關卡、或是轉介人),這層 layer 有一個 king of layer 在管理,確保流量進入 pod 之前我們可以做更多事情,這就是 Service Mesh。
Service Mesh 是一種基於微服務架構的獨立通信層,用於管理服務之間的通信。在 Service Mesh 中,代理(通常稱為 sidecar 代理)中攔截並將流量引導至相應的目的地。這種方法使您能夠集中管理和控制流量,而無需修改或編排您的應用程序本身。
如果沒有 service mesh,會變得很麻煩,以下舉例:
Service Mesh 解決方案包括: